<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>留言板</title>
    <style>
        .container {
            width: 350px;
            height: 300px;
            margin: 0 auto;
            /* border: 1px black solid; */
            text-align: center;
        }

        .grey {
            color: grey;
        }

        .container .row {
            width: 350px;
            height: 40px;

            display: flex;
            justify-content: space-between;
            align-items: center;
        }

        .container .row input {
            width: 260px;
            height: 30px;
        }

        #submit {
            width: 350px;
            height: 40px;
            background-color: orange;
            color: white;
            border: none;
            margin: 10px;
            border-radius: 5px;
            font-size: 20px;
        }
    </style>
</head>

<body>
<div class="container">
    <h1>留言板</h1>
    <p class="grey">输入后点击提交, 会将信息显示下方空白处</p>
    <div class="row">
        <span>谁:</span> <input type="text" name="" id="from">
    </div>
    <div class="row">
        <span>对谁:</span> <input type="text" name="" id="to">
    </div>
    <div class="row">
        <span>说什么:</span> <input type="text" name="" id="say">
    </div>
    <input type="button" value="提交" id="submit" onclick="submit()">
    <!-- <div>A 对 B 说: hello</div> -->
</div>

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>
    // 页面加载完成后自动执行的AJAX请求
    $.ajax({
        type: "get",  // 请求类型：GET（获取数据）
        url: "/message/getList",  // 请求地址：后端获取留言列表的接口
        success: function (messages) {  // 请求成功时的回调函数，messages是服务器返回的数据
            // 判断返回的数据是否为空或空数组
            if (messages == null || messages.length == 0) {
                return;  // 如果为空，直接返回，不执行后续操作
            }

            // 使用for-of循环遍历messages数组中的每个留言对象
            for (var message of messages) {
                // 构造HTML div元素字符串
                // message.from: 发送者，message.to: 接收者，message.message: 留言内容
                var divE = "<div>" + message.from + "对" + message.to + "说:" + message.message + "</div>";

                // 使用jQuery的append方法将构造的div元素添加到.container容器末尾
                $(".container").append(divE);
            }
        }
        // 注意：这里缺少error回调函数处理请求失败的情况
    });

    // 提交留言的函数，由按钮的onclick事件触发
    function submit() {
        // 1. 获取三个输入框的值
        // $('#from')：jQuery选择器，选择id为"from"的元素
        // .val()：获取该输入框的值
        var from = $('#from').val();  // 获取"谁"输入框的值
        var to = $('#to').val();      // 获取"对谁"输入框的值
        var say = $('#say').val();    // 获取"说什么"输入框的值

        // 简单的前端验证：检查是否有空值
        if (from == '' || to == '' || say == '') {
            return;  // 如果有空值，直接返回，不执行后续操作
        }

        // 发送AJAX请求到后端进行数据存储
        $.ajax({
            type: "post",  // 请求类型：POST（提交数据）
            url: "/message/publish",  // 请求地址：后端发布留言的接口
            contentType: "application/json",  // 设置请求内容类型为JSON格式
            // 将JavaScript对象转换为JSON字符串
            data: JSON.stringify({
                from: from,    // 发送者
                to: to,        // 接收者
                message: say   // 留言内容
            }),
            success: function (result) {  // 请求成功时的回调函数
                console.log(result);  // 在浏览器控制台打印返回结果，用于调试

                // 判断后端返回的操作结果
                if (result.ok == 1) {  // 如果ok属性为1，表示操作成功
                    // 成功后的操作：

                    // 2. 构造新的留言显示div元素
                    var divE = "<div>" + from + "对" + to + "说:" + say + "</div>";

                    // 3. 将新留言添加到页面中（无需重新加载整个页面）
                    $(".container").append(divE);

                    // 4. 清空输入框的值，方便用户输入下一条留言
                    $('#from').val("");  // 清空"谁"输入框
                    $('#to').val("");    // 清空"对谁"输入框
                    $('#say').val("");   // 清空"说什么"输入框
                } else {
                    // 如果操作失败，弹出警告框提示用户
                    alert("添加留言失败");
                }
            }
            // 注意：这里同样缺少error回调函数处理网络错误等情况
        });
    }
</script>
</body>

</html>